#!/usr/bin/env python3
# encoding: utf-8
import os
import glob
import argparse
import sys

def delete_files_by_pattern(directory, pattern, dry_run=False, verbose=True):
    """
    批量删除指定目录下匹配指定模式的文件
    
    :param directory: 目标目录路径
    :param pattern: 文件匹配模式（支持 glob 语法）
    :param dry_run: 是否仅模拟删除（不实际删除）
    :param verbose: 是否显示详细操作信息
    """
    # 获取目标目录的绝对路径
    target_dir = os.path.abspath(directory)
    print(f"[INFO] 目标目录: {target_dir}")
    # 调试用
    # 查找匹配的文件
    matching_files = glob.glob(os.path.join(target_dir, pattern))
    
    if not matching_files:
        if verbose:
            print(f"[INFO] 目录 {target_dir} 下没有匹配模式 '{pattern}' 的文件")
        return
    
    if verbose:
        print(f"[INFO] 找到 {len(matching_files)} 个匹配的文件:")
        for i, file_path in enumerate(matching_files, 1):
            print(f"  {i}. {file_path}")
    
    if dry_run:
        if verbose:
            print("[INFO] 干运行完成，未实际删除任何文件")
        return
    
    # 确认删除
    confirm = input(f"[警告] 将删除 {len(matching_files)} 个文件。确认吗？(yes/no): ").strip().lower()
    if confirm != 'yes':
        if verbose:
            print("[INFO] 删除操作已取消")
        return
    
    # 执行删除
    deleted_count = 0
    for file_path in matching_files:
        try:
            os.remove(file_path)
            deleted_count += 1
            if verbose:
                print(f"[INFO] 已删除: {file_path}")
        except Exception as e:
            if verbose:
                print(f"[ERROR] 删除 {file_path} 失败: {str(e)}")
    
    if verbose:
        print(f"[INFO] 总共删除了 {deleted_count}/{len(matching_files)} 个文件")

def main():
    # 设置命令行参数解析
    parser = argparse.ArgumentParser(
        description="批量删除指定目录下匹配指定模式的文件",
        formatter_class=argparse.ArgumentDefaultsHelpFormatter
    )
    parser.add_argument(
        "directory",
        help="目标目录路径"
    )
    parser.add_argument(
        "pattern",
        help="文件匹配模式（支持 glob 语法，如 *.log, temp_*, data_?.txt）"
    )
    parser.add_argument(
        "--dry-run",
        action="store_true",
        help="仅显示将要删除的文件，不实际删除"
    )
    parser.add_argument(
        "-v", "--verbose",
        action="store_true",
        help="显示详细操作信息"
    )
    
    args = parser.parse_args()
    
    delete_files_by_pattern(
        directory=args.directory,
        pattern=args.pattern,
        dry_run=args.dry_run,
        verbose=args.verbose
    )
# python3 delete-file.py "" "*2025*"    空串表示当前目录
if __name__ == "__main__":
    main()